package stream;

import java.util.ArrayList;

/**
 * 中间方法-filter
 */
public class MyStream3 {
    public static void main(String[] args) {
        // Stream<T> filter (Predicate predicate): 过滤
        // Predicate接口中方法  boolean test (T t): 对给定的参数进行判断，返回一个布尔值
        ArrayList<String> list = new ArrayList<>();
        list.add("张三丰");
        list.add("张无忌");
        list.add("张翠山");
        list.add("王二麻子");
        list.add("张良");
        list.add("谢广坤");

        /**
         * filter方法获取流中
         * filter方法获取流中的 每一个数据,
         * 而test方法中的s,就依次表示流中的每一个数据
         * 我们只要在test方法中对s进行判断就可以了。
         * 如果判断的结果为true,则当前的数据留下
         * 如果判断的结果为false,则当前数据就不要
         */

        // 匿名内部类
        /*list.stream().filter(
                new Predicate<String>() {
                    @Override
                    public boolean test(String s) {
                        return s.startsWith("张");
                    }
                }
        ).forEach(s-> System.out.println(s));*/


        // lambda表达式的写法
        // 因为Predicate接口中只有一个抽象方法test,所以我们可以使用lambda表达式来简化
        /*list.stream().filter(
                (String s)->{
                    return s.startsWith("张");
                }
        ).forEach(s-> System.out.println(s));*/

        // lambda表达式简写
        // list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
        list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);


    }
}
